package com.lq.learningTest.Socket;

import org.junit.Test;

import java.io.IOException;
import java.net.*;

//udp无序建立连接
public class UdpTest {
    //发送端
    @Test
    public void sender() throws IOException {

        // 创建socket，可以指定端口，如果不指定会随机开一个端口，一般我们客户端都会选择随机端口
        DatagramSocket socket = new DatagramSocket();

        String str = "我是UDP方式发送的导弹";
        byte[] data = str.getBytes();
        while(true){
            // 构建一个数据报
            DatagramPacket packet = new DatagramPacket(
                    data,0,data.length,
                    new InetSocketAddress(InetAddress.getByName("localhost"),9090)
            );

            // 直接发送
            socket.send(packet);
        }

//        socket.close();

    }

    //接收端
    @Test
    @SuppressWarnings("InfiniteLoopStatement")
    public void receiver() throws IOException {

        DatagramSocket socket = new DatagramSocket(9090);

        byte[] buffer = new byte[100];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);

        while(true){
            // 接收
            socket.receive(packet);
            // packet.getData() 用来获取数据报的数据
            // packet.getLength() 用来获取读取的数据报的长度,如果使用缓存区大小会因为接受的内容没有缓存区这么多也出现缺损的乱码
            String str = new String(packet.getData(), 0, packet.getLength());
            System.out.println(str);
        }


//        socket.close();
    }
}
